package com.lebang.service;

import com.lebang.entity.sys.Group;
import com.lebang.entity.sys.LbbUser;
import com.lebang.entity.sys.User;
import com.lebang.mapper.LbbGroupMapper;
import com.lebang.mapper.LbbUserMapper;
import com.lebang.mapper.UserGroupMapper;
import com.lebang.model.enums.Booleans;
import com.lebang.model.vo.UserSearchVo;
import com.lebang.model.vo.UserVo;
import com.lebangweb.common.UUIDUtil;
import com.lebangweb.encrypt.MessageDigestUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class  UserService {

    @Autowired
    private LbbUserMapper userMapper;

    @Autowired
    private LbbGroupMapper groupMapper;

    @Autowired
    private UserGroupMapper userGroupMapper;
    @Autowired
    private LbbUserMapper lbbUserMapper;

    /**
     * 根据账号密码获取
     *
     * @param username
     * @param password
     * @return
     * @author weizx
     * @date 2018年7月9日 下午4:47:16
     */
    public String get(String username, String password) {
        Map<String, Object> params = new HashMap<>();
        params.put("username", username);
        try {
            params.put("password", MessageDigestUtil.encryptMD5(password.getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return userMapper.indexUserId(params);
    }

    /**
     * 根据用户id获取
     *
     * @param userid
     * @return
     * @author weizx
     * @date 2018年7月9日 下午4:47:28
     */
    public LbbUser get(String userid) {
        return lbbUserMapper.getByUserId(userid);
    }

    /**
     * 更新密码
     *
     * @param userid
     * @param password
     * @author weizx
     * @date 2018年7月9日 下午5:03:19
     */
    public int update(String userid, String password) {
        LbbUser user = lbbUserMapper.getByUserId(userid);
        if (user == null) {
            return 0;
        }
        try {
            user.setPassword(MessageDigestUtil.encryptMD5(password.getBytes()));
            return lbbUserMapper.updateByPrimaryKeySelective(user);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }

    }

    /**
     * 用户列表
     *
     * @param vo
     * @return
     * @author weizx
     * @date 2018年7月10日 下午2:30:32
     */
    public Map<String, Object> list(UserSearchVo vo) {
        Map<String, Object> data = new HashMap<>();
        Integer total = userMapper.total(vo);
        List<User> rows = userMapper.pagging(vo);
        data.put("total", total);
        data.put("rows", rows);
        return data;
    }

    /**
     * 新增
     *
     * @param vo
     * @author weizx
     * @date 2018年7月10日 下午6:35:41
     */
    public String insert(UserVo vo) {
        Map<String, Object> params = new HashMap<>();
        params.put("username", vo.getUsername());
        LbbUser user = lbbUserMapper.getByname(vo.getUsername());
        if (user != null) {
            return "用户名已存在！";
        }
        user = new LbbUser();
        user.setUserId(UUIDUtil.M());
        user.setEmail(vo.getEmail());
        user.setNickname(vo.getNickname());
        try {
            user.setPassword(MessageDigestUtil.encryptMD5(vo.getPassword().getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
            return "password fail";
        }
        user.setPhone(vo.getPhone());
        user.setRealName(vo.getRealname());
        user.setUsername(vo.getUsername());
        user.setHasDeleted(Booleans.False.name());
        user.setCreateTime(new Date());
        lbbUserMapper.insertSelective(user);
        return "添加成功！";
    }

    /**
     * 更新
     *
     * @param vo
     * @author weizx
     * @date 2018年7月10日 下午7:31:51
     */
    public String update(UserVo vo) {
        LbbUser user = lbbUserMapper.getByUserId(vo.getUserId());
        if (user == null) {
            return "用户不存在！";
        }
        if (!user.getUsername().equals(vo.getUsername())) {
            LbbUser user1 = lbbUserMapper.getByname(vo.getUsername());
            if (user1 != null) {
                return "用户名已存在！";
            }
        }
        user.setEmail(vo.getEmail());
        user.setNickname(vo.getNickname());
        try {
            user.setPassword(MessageDigestUtil.encryptMD5(vo.getPassword().getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
            return "password fail";
        }
        user.setPhone(vo.getPhone());
        user.setRealName(vo.getRealname());
        user.setUsername(vo.getUsername());
        lbbUserMapper.updateByPrimaryKeySelective(user);
        return "修改成功！";
    }

    /**
     * 获取分组（含用户）
     *
     * @param userid
     * @return
     * @author weizx
     * @date 2018年7月11日 上午10:21:52
     */
    public List<Group> getGroups(String userid) {
        return groupMapper.list(userid);
    }

    /**
     * 更新用户分组
     *
     * @param userid
     * @param groupid
     * @return
     * @author weizx
     * @date 2018年7月11日 下午12:03:10
     */
    public String updateGroup(String userid, String groupid) {
        int ishas = userGroupMapper.ishas(userid, groupid);
        if (ishas > 0) {
            userGroupMapper.delete(userid, groupid);
        } else {
            userGroupMapper.insert(userid, groupid);
        }
        return "OK";
    }

    /**
     * 删除
     *
     * @param ids
     * @return
     * @author weizx
     * @date 2018年7月11日 下午5:10:46
     */
    public void del(String[] ids) {
        userMapper.del(ids);
    }
}
